const express = require("express")
const multer = require("multer")
const path = require("path")
const {join} = require("path")
const journalDB = require("../../../../db/journal")
const fs = require("fs")
const router = express.Router()

// 日志的各种修改
// 权限判断
router.use((req,res,next)=>{
  if(!req.session.userInfo.allowUpdate){
    return res.send({
      code:15,
      mes:"您没有修改权限，请联系超级管理员进行添加"
    })
  }
  next()
})


// 上传md文件
let mdUpload = multer({
  storage:multer.diskStorage({
    // 文件存储的目录
    destination(req,file,cb){
      cb(null,join(__dirname,"../../../../static/journal/md"))
    },
    // 文件的名字
    filename(req,file,cb){
      let name = req.session.userInfo._id
      let ext = path.extname(file.originalname)
      req.mdFile = "journal"+name+Date.now()+ext
      cb(null,req.mdFile)  //名字
    }
  })
}).single("file") //name名字 elemetUI默认为file

// 上传cover文件
let coverUpload = multer({
  storage:multer.diskStorage({
    // 文件存储的目录
    destination(req,file,cb){
      cb(null,join(__dirname,"../../../../static/journal/cover"))
    },
    // 文件的名字
    filename(req,file,cb){
      let name = req.session.userInfo._id
      let ext = path.extname(file.originalname)
      req.coverFile = "journal"+name+Date.now()+ext
      cb(null,req.coverFile)  //名字
    }
  })
}).single("file") //name名字 elemetUI默认为file

// 更新日志标题和描述
router.post("/update",async(req,res)=>{
  try {
    // 权限判断
    router.use((req,res,next)=>{
      if(!req.session.userInfo.allowUpdate){
        return res.send({
          code:15,
          mes:"您没有修改权限，请联系超级管理员进行添加"
        })
      }
      next()    
    })
    let {_id,title,des,mtime} = req.body
    // 判断日志是否存在
    let doc = await journalDB.findById(_id)

    if(!doc){
      return res.send({
        code:9,
        mes:"该日志已被删除，请刷新后重试"
      })
    }
    await journalDB.findByIdAndUpdate(_id,{
      title,
      des,
      mtime
    })
    res.send({
      code:0,
      mes:"修改成功"
    })
  } catch (error) {
    res.send({
      code:5,
      mes:"服务器异常，请稍后再试"
    })
  }
})

// 更新日志中的cover文件
router.post("/updateCover",(req,res)=>{
  try {
    coverUpload(req,res,async err=>{
      let {_id} = req.body
      let doc = await journalDB.findById(_id)
      // 检测相应日志是否存在
      if(!doc){
        return res.send({
          code:9,
          mes:"该日志已被删除，请刷新后重试"
        })
      }
      // 检测是否上传成功
      if(err){
        return res.send({
          code:8,
          mes:"md文件上传失败,请刷新后重试"
        })
      }  
      // 删除旧文件
      doc.cover.forEach(item=>{
        fs.rm(join(__dirname,"../../../../static"+item),{recursive:true},err=>{
          if(err) return
        })
      })
      // 更改数据库  //删除
      await journalDB.findByIdAndUpdate(_id,{
        $pop:{cover:-1},
        mtime:Date.now(),
      })
       // 更改数据库  //添加
       await journalDB.findByIdAndUpdate(_id,{
        $push:{
          cover:"/journal/cover/"+req.coverFile
        },
        mtime:Date.now(),
      })
      res.send({
        code:0,
        mes:"封面图已更新"
      }) 

    }) 
  } catch (error) {
    res.send({
      code:5,
      mes:"服务器异常，请稍后再试"
    })
  }
})

// 更新日志md文件
router.post("/updateMd",(req,res)=>{
  try {
    // 上传md文件
  mdUpload(req,res,async err=>{
    // 判断日志是否存在
    let {_id,md} = req.body
    let doc = await journalDB.findById(_id)
    // 日志不存在
    if(!doc){
      return res.send({
        code:9,
        mes:"该日志已被删除，请刷新后重试"
      })
    }
    // 判断上传是否成功
    if(err){
      return res.send({
        code:8,
        mes:"md文件上传失败,请刷新后重试",
        data:err
      })
    } 
    // 删除原本的md文件
    fs.rm(join(__dirname,"../../../../static"+md),{recursive:true},err=>{
      if(err) return
    }) 
    // 修改数据库中md文件路径
    await journalDB.findByIdAndUpdate(_id,{
      md:"/journal/md/"+req.mdFile,
      mtime:Date.now()
    })
    res.send({
      code:0,
      mes:"md文件已更新",
    }) 
  })
  } catch (error) {
    res.send({
      code:5,
      mes:"服务器异常，请稍后再试"
    })
  }
})






module.exports = router